//
//  main.m
//  OC2_实例变量可见度_方法
//
//  Created by Scott on 16/2/25.
//  Copyright © 2016年 Scott. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"

/** 知识点: 成员变量可见度. */
void chapterOfVisibility() {
    // 详见 Person类文件.
    
    // 创建Person对象.
    Person *per = [[Person alloc] init];
    
    per->_name = @"Tom";
//    per->_sex = @"male";
    
}

/** 知识点: 方法. */
void chapterOfMethod() {
    
    // 方法,C语言叫函数. 本质是功能代码块.
    // 在Person 类里面提供 方法, 间接取值\赋值 实例变量.
    
    Person *per = [[Person alloc] init];
    
    [per setSex:@"male"];
    
    NSString *sex = [per getSex];
    
    
}

/** 知识点: setter, getter 方法. */
void chapterOfMethodForSetterGetter() {
    
    // setter 是只给一个实例变量赋值.
    // getter 取一个实例变量值
    // setter和getter的语法要符合OC的规定.
    
    Person *per = [[Person alloc] init];
    
    per.name = @"Tom";
    [per setName:@"Zhangsan"];
    
    // 取值
    NSString *name = per.name;
    NSString *name2 = [per name];
    
    
}

/** 知识点: 自定义初始化方法. */
void chapterOfInit() {
    
    // 自定义初始化方法的目的:
    // 初始化同时,一些实例变量赋值.
    Person *per = [[Person alloc] initWithName:@"Tom" sex:@"male" age:20];
    
    Person *per2 = [[Person alloc] initWithName:@"zhangsan"];
    
}

/** 知识点: 便利构造器方法. */
void chapterOfStructor() {
    
    // 构造器方法的目的:
    // 开辟空间, 初始化, 赋值.
    // + 方法.
    
    Person *per = [Person personWith:@"Tom" sex:@"male" age:20];
    
    
    
}


/** 限时代码. */
void limitTimeCoded() {
    
    
}

/** 阅读资料. */
void resource() {
    
    
}


#pragma mark - MAIN FUNCTION
int main(int argc, const char * argv[]) {
    
#pragma mark - 知识点1. (实例变量)成员变量可见度
//    chapterOfVisibility();
    
#pragma mark - 知识点2. 方法
//    chapterOfMethod();
    
#pragma mark - 知识点3. setter, getter 方法
//    chapterOfMethodForSetterGetter();
    
#pragma mark - 知识点4. 自定义初始化方法
    chapterOfInit();
    
    
#pragma mark - 知识点5: 便利构造器
    chapterOfStructor();
    
    
    
#pragma mark - 限时代码.
    limitTimeCoded();
    
#pragma mark - 阅读资料.
    resource();
    
    return 0;
}






